package com.example.libary.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.libary.dto.BorrowRecordDTO;
import com.example.libary.entity.BorrowRecord;

/**
 * 借阅记录服务接口
 */
public interface BorrowRecordService extends IService<BorrowRecord> {
    
    /**
     * 借书
     *
     * @param userId 用户ID
     * @param bookId 图书ID
     * @param days   借阅天数
     * @return 是否成功
     */
    boolean borrow(Long userId, Long bookId, Integer days);
    
    /**
     * 还书
     *
     * @param id 借阅记录ID
     * @return 是否成功
     */
    boolean returnBook(Long id);
    
    /**
     * 续借
     *
     * @param id   借阅记录ID
     * @param days 续借天数
     * @return 是否成功
     */
    boolean renew(Long id, Integer days);
    
    /**
     * 分页查询借阅记录
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param bookId 图书ID
     * @param status 状态
     * @return 分页数据
     */
    Page<BorrowRecord> page(Page<BorrowRecord> page, Long userId, Long bookId, String status);
    
    /**
     * 分页查询借阅记录详情（包含用户姓名和图书名称）
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param bookId 图书ID
     * @param status 状态
     * @return 分页数据
     */
    Page<BorrowRecordDTO> pageWithDetails(Page<BorrowRecordDTO> page, Long userId, Long bookId, String status);
    
    /**
     * 查询用户借阅中的记录数
     *
     * @param userId 用户ID
     * @return 记录数
     */
    int countBorrowingByUserId(Long userId);
    
    /**
     * 检查图书是否可借
     *
     * @param bookId 图书ID
     * @return 是否可借
     */
    boolean checkBookAvailable(Long bookId);
} 